package com.cheng.algorithm.sort;

import java.util.Arrays;

/**
 * @User Administrator
 * @Classname SelectSort
 * @Project Data-structure-and-algorithm
 * @Description 选择排序算法代码实现
 * 介绍：
 * 选择式排序也属于内部排序法，是从欲排序的数据中，按指定的规则选出某一中元素，再依规定交换位置后达到排序的目的。
 * 基本思想：
 * 每一轮排序通过循环，选出最小的数
 * 1、第一次排序，从数组中选出一个最小的，放到第一个位置
 * 2、第二次排序，从第二个数到最后一个数中，选择最小的数，放到第二个位置
 * 3、以此类推，直到只剩一个数，排序完毕
 *
 * @Author wpcheng
 * @Create 2021-08-03-22:39
 * @Version 1.0
 */
public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {101,34,119,1};
        selectSort(arr);

    }

    /**
     *
     * @param arr
     */
    public static void selectSort(int[] arr ){

        //第一轮
        int minIndex = 0;
        int min = arr[0]; //取出第一个位置的数，赋值为min
        for (int j = 1; j < arr.length; j++) {
            if (min > arr[j]){ //从第二个位置开始循环，如果min大于后面的第j个数
                min = arr[j];  //把第j个数数存入min
                minIndex = j;
            }
        }
        //把原先第一个位置的数和当前第j个数交换
        arr[minIndex] = arr[0];
        arr[0] = min;
        System.out.println("第一轮：");
        System.out.println(Arrays.toString(arr));

        //第二轮
         minIndex = 1;
         min = arr[1]; //取出第二个位置的数，赋值为min
        for (int j = 2; j < arr.length; j++) {
            if (min > arr[j]){ //从第三个位置开始循环，如果min大于后面的第j个数
                min = arr[j];  //把第j个数数存入min
                minIndex = j;
            }
        }
        //把原先第二个位置的数和当前第j个数交换
        arr[minIndex] = arr[1];
        arr[1] = min;
        System.out.println("第二轮：");
        System.out.println(Arrays.toString(arr));

        //第三轮
        minIndex = 2;
        min = arr[2]; //取出第三个位置的数，赋值为min
        for (int j = 3; j < arr.length; j++) {
            if (min > arr[j]){ //从第四个位置开始循环，如果min大于后面的第j个数
                min = arr[j];  //把第j个数数存入min
                minIndex = j;
            }
        }
        //把原先第三个位置的数和当前第j个数交换
        arr[minIndex] = arr[2];
        arr[2] = min;
        System.out.println("第三轮：");
        System.out.println(Arrays.toString(arr));

    }

}
